Eine Sammlung an Tipps, um deine CSS-Fähigkeiten zu professionalisieren.
Für andere großartige Listen schaue dir [@sindresorhus](https://github.com/sindresorhus/)s kuratierte Liste von “awesome” Listen an.
box-sizing
      unset, anstatt alle Eigenschaften
          zurückzusetzen
      :not() um Rahmen an die Navigation zu setzen
          oder zu entfernen
      line-height an body
      :focus für Form-Elemente
      nth-child
      max-height für reine CSS-Galerien
      rem für globales Ändern der Größe; Benutze
          em für lokale Größenveränderungen
      :root für flexible Schrift
      font-size auf Formular-Elemente für eine bessere
          mobile Erfahrung
      Pointer-Events um Mausereignisse zu
          kontrollieren
      display: none ein
      CSS Resets helfen dabei eine Gestaltungskonsistenz zwischen verschiedenen Browsern herzustellen, indem sie für einen sauberen Zustand zwischen den einzelnen Elementen sorgen. Du kannst eine CSS Resetsammlung wie Normalize, usw. benutzen, oder einen etwas einfacheren Ansatz wählen:
      Nun werden Elemente von ihren Margins und Paddings befreit und
      box-sizing lässt dich das CSS Box-Modell handhaben.
    
      Hinweis: Wenn du den
      Inherit box-sizing-Tipp im unten folgenden Punkt befolgst, kannst du dich dafür entscheiden
      keine box-sizing-Eigenschaft in dein CSS Reset aufzunehmen.
    
box-sizingÜbernehme box-sizing von html:
      Dies macht es einfacher das box-sizing über Plugins oder
      andere Komponenten zu verändern.
    
unset, anstatt alle Eigenschaften zurückzusetzen
    Wenn du die Eigenschaften eines Elements zurücksetzt, ist es nicht notwendig jede einzelne Eigenschaft individuell zurückzusetzen:
button {
  background: none;
  border: none;
  color: inherit;
  font: inherit;
  outline: none;
  padding: 0;
}
    
      Du kannst alle Eigenschaften eines Elements spezifizieren, indem du das
      all-Kürzel verwendest. Der Wert unset setzt die
      Eigenschaften eines Elements auf den initialen Wert zurück:
    
      Hinweis: Die Kurzform all und “unset” wird
      in IE11 nicht unterstützt.
    
:not() um Rahmen an die Navigation zu setzen oder zu
      entfernen
    Anstatt den Rahmen zu ergänzen…
…um ihn dann beim letzten Element wieder zu entfernen…
      …benutze die :not()-Pseudoklasse um nur die Elemente zu
      gestalten, die du willst:
    
      Sicher, du kannst .nav li + li verwenden, aber mit
      :not() ist die Absicht sehr klar und der CSS Selektor
      definiert den Rahmen auf die Weise wie ihn auch ein Mensch beschreiben
      würde.
    
Du kan kontrollere, om en skrifttype er installeret lokalt, før du henter den eksternt, hvilket også er et godt ydelsestip.
@font-face {
  font-family: "Dank Mono";
  src:
    /* Full name */
    local("Dank Mono"),
    /* Postscript name */
    local("Dank Mono"),
    /* Otherwise, download it! */
    url("//...a.server/fonts/DankMono.woff");
}
code {
  font-family: "Dank Mono", system-ui-monospace;
}
    Hat tip til Adam Argyle for at dele denne protip og demoen.
line-height an body
    
      Du brauchst kein line-height an jedes <p>,
      <h*>, usw separat zu schreiben. Ergänze es stattdessen
      an body:
    
      Auf diese Weise können Textelemente dies einfach von
      body übernehmen.
    
:focus für Form-Elemente
    Sehende Tastaturbenutzer_innen sind auf die Fokussierung angewiesen, um unterscheiden zu können wohin Tastaturevents auf der Seite gehen. Gestalte den Fokus für Formular-Elemente klar ersichtlich und konsistenter als die voreingestellte Browserimplementation:
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
  box-shadow: none;
  outline: #000 dotted 2px;
  outline-offset: .05em;
}
    Nein, das ist keine Hexerei – du kannst wirklich alle Elemente vertikal zentrieren. Das machst du mit Flexbox…
html,
body {
  height: 100%;
  margin: 0;
}
body {
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
  display: -webkit-flex;
  display: flex;
}
    …und ebenso mit CSS Grid:
Möchtest du etwas anderes zentrieren? Vertikal, horizontal… alles, jederzeit, überall? CSS-Tricks hat eine schöne Ausarbeitung über all dies.
Hinweis: Passe auf das fehlerhafte Verhalten von Flexbox in IE11 auf.
Lasse Listenpunkte wie eine echte kommaseparierte Liste aussehen:
      Benutze die :not()-Pseudoklasse, um nach dem letzten
      Listenpunkt kein Komma anzuzeigen.
    
Hinweis: Dieser Tipp mag hinsichtlich der Zugänglichkeit für Bildschirmvorleseprogramme nicht ideal sein. Auch Kopieren/Einfügen von browsergeneriertem Inhalt funktioniert nicht. Handle deswegen mit Vorsicht.
nth-child
    
      Benutze ein negatives nth-child im CSS um Items von 1 bis n
      auszuwählen.
    
li {
  display: none;
}
/* wähle die Listenpunkte 1 bis 3 und zeige sie an */
li:nth-child(-n+3) {
  display: block;
}
    
      Anderweitig, da du nun ein bisschen über die
      Benutzung von :not()
      gelernt hast, versuche folgendes:
    
/* wähle alle Listenpunkte außer die ersten 3 und zeige sie an */
li:not(:nth-child(-n+3)) {
  display: block;
}
    Es gibt keinen Grund SVG für Symbole nicht zu verwenden:
SVG skaliert für alle verschiedenen Auflösungen sehr gut und wird von allen Browsern zurück bis zu IE9 unterstützt. Gebe deinen .png, .jpg, or .gif-jif-wasauchimmer-Dateien den Laufpass.
Hinweis: Wenn du nur SVG-Symbole in Button-Schaltflächen für sehende Benutzer_innen verwendest und das SVG nicht geladen wird, kannst du die Zugänglichkeit wie folgt erhalten:
      Er hat zwar einen seltsamen Namen aber der Universal-Selektor
      (*) mit dem angrenzenden Geschwister-Selektor
      (+) kann starke CSS-Möglichkeiten darbieten:
    
      In diesem Beispiel bekommen alle Elemente im Fluss des Dokuments, die
      anderen Elementen folgen, margin-top: 1.5em.
    
Für mehr bezüglich des “lobotomisierte Eule”-Selektors lese Heydon Pickerings Eintrag auf A List Apart.
max-height für reine CSS-Galerien
    
      Implementiere reine CSS Galerien über max-height in
      Verbindung mit overflow: hidden:
    
.slider {
  max-height: 200px;
  overflow-y: hidden;
  width: 300px;
}
.slider:hover {
  max-height: 600px;
  overflow-y: scroll;
}
    
      Das Element dehnt sich beim Überfahren zum Wert von
      max-height aus und die Galerie wird als das Ergebnis des
      Overflows dargestellt.
    
      Tabellen können ein ganz schönes Problem sein. Versuche
      table-layout: fixed, um die Tabellenzellen auf die gleiche
      Größe zu setzen:
    
Schmerzfreie Tabellen-Layouts.
      Wenn du mit Spaltenabständen arbeitest, kannst du dich von
      nth-, first- und last-child-Hacks
      verabschieden, indem du die Flexbox-Eigenschaft
      space-between verwendest:
    
Nun erscheinen Spaltenabstände immer gleichmäßig.
      Zeige Verlinkungen an, wenn das <a>-Element keinen
      Textwert beinhaltet, das href-Attribut jedoch eine Verlinkung
      hat:
    
Das ist äußerst praktisch.
Ergänze eine Darstellung für die von Browsern voreingestellte Verlinkung:
      Nun werden Verlinkungen, die über ein CMS eingesetzt wurden – welche
      überlicherweise kein class-Attribut haben – unterscheidbar
      sein, ohne die Kaskade im Allgemeinen zu beeinflussen.
    
Um eine Box mit zugehörigem Größenverhältnis zu erstellen, brauchst du nur eine Padding-top/-bottom-Eigenschaft zu bezeichnen:
.container {
  height: 0;
  padding-bottom: 20%;
  position: relative;
}
.container div {
  border: 2px dashed #ddd;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
}
    Das Anwenden eines Wertes von 20% auf die Padding-Eigenschaft erzeugt eine Box mit der gleichen Höhe in Bezug auf 20% ihrer Breite. Ungeachtet der Weite des Ansichtsfensters, wird das Kind-Div sein Seitenverhältnis beibehalten (100% / 20% = 5:1).
Erzeuge mit einem kleinen bisschen CSS ästhetisch ansprechendere defekte Bilder:
img {
  display: block;
  font-family: sans-serif;
  font-weight: 300;
  height: auto;
  line-height: 2;
  position: relative;
  text-align: center;
  width: 100%;
}
    Nun ergänze Regeln für Pseudo-Elemente, die eine Nachricht für die Benutzer_innen darstellen, sowie eine URL-Referenz des defekten Bildes:
img::before {
  content: "Entschuldige bitte, das Bild ist leider defekt :(";
  display: block;
  margin-bottom: 10px;
}
img::after {
  content: "(url: " attr(src) ")";
  display: block;
  font-size: 12px;
}
    Lerne mehr über das Gestalten dieses Modells in Ire Aderinokuns ursprünglichen Beitrag.
rem für globales Ändern der Größe; Benutze
      em für lokale Größenveränderungen
    
      Nachdem du die grundlegende Schriftgröße (html { font-size: 100%; }) festgelegt hast, setze die Schriftgrößen für Textelemente auf
      em:
    
Dann setze die Schriftgröße für Module auf rem:
Nun sollte jedes Modul gegliedert, einfacher zu gestalten, wartbarer und flexibler sein.
Das ist ein großartiger Trick für ein speziell angefertigtes Stylesheet. Vermeide es die Benutzer_innen mit den Geräuschen eines automatisch startenden Videos zu überfordern. Zeige das Video nicht, wenn die Töne nicht auf stumm geschaltet sind:
      Erneut nutzen wir die
      :not()-Pseudoklasse zu unserem Vorteil.
    
:root für flexible Schrift
    
      Die Größe der Schriftart innerhalb eines responsive Layouts
      sollte mit jedem Ansichtsfenster veränderbar sein. Du kannst die
      Schriftgröße basierend auf der Höhe und Weite des Fensters berechnen,
      indem du :root verwendest:
    
      Nun kannst du die root em-Einheit verwenden, die auf den
      errechneten Werten von :root basiert:
    
font-size auf Formular-Elemente für eine bessere mobile
      Erfahrung
    
      Um mobile Browser (iOS Safari, usw.) am Hereinzoomen in das HTML-Formular
      zu hindern sobald ein <select>-Dropdown betätigt wird,
      ergänze font-size zu der Regel des Selektors:
    
:dancer:
Pointer-Events um Mausereignisse zu kontrollieren
    Pointer-Events erlauben es dir zu spezifizieren wie die Maus mit dem Element interagiert sobald sie es berührt. Um beispielsweise das standardgemäß eingestellte Pointer-Event – beispielsweise bei einer Button-Schaltfläche – abzuschalten:
So einfach ist das.
display: none ein
    Wie Harry Roberts hervorhob, kann dies dazu beitragen, dass CMS-Benutzer keine zusätzlichen Zeilenumbrüche als Abstand verwenden:
Aktuelle Versionen von Chrome, Firefox, Safari, Opera, Edge und IE11.